概要
このセクションでは、アプリケーションを Mac OS X
に移行するときに検討する必要のある、重要で高度な概念の全般的概要を示します。
Carbon
既存のアプリケーションは、Mac OS X の Classic
環境内で実行することができます。しかし、これらのアプリケーションは、Carbon
アプリケーションとして再コンパイルしないかぎり、Mac
OS X
が提供するさまざまな機能を利用することができません。
Carbon は Mac OS X に対応した Apple の新しい API
セットで、これまで Mac OS 9 で提供されていた重要な
API のサブセットと内容豊かな新しい API
のセットをまとめたものです。
Carbon API の詳細については、次の Web サイトで
Carbon
のオンラインマニュアルを参照してください。
http://developer.apple.com/macosx/carbon/.
ページの先頭に戻る
CFM と Mach-O
Mac OS X では、CFM および Mach-O という 2
つのランタイムモデルがサポートされています。Mac OS
8 および Mac OS 9 では Mach-O
ランタイムモデルがサポートされていないため、Mac OS
X および Mac OS 8/9
の両方で実行できる単一のバイナリアプリケーションは、CFM
アプリケーションとしてコンパイルする必要があります。逆に、mach
カーネル、または BSD
サービスへの直接的なアクセスを必要とするアプリケーションは、Mach-O
バイナリとしてビルドされているか、または CFBundle
ストラテジを採用して、基盤となる Mach-O
コンパイル済みルーチンを呼び出す必要があります。
Mac OS X
ランタイムモデルの詳細については、『Mac
OS X System Overview』を参照してください。
ページの先頭に戻る
Mac OS 9 のパッケージと Mac OS X
の「バンドル」
Mac OS X では、Mac OS 9 のパッケージ形式と新しい
Mac OS X
のバンドル形式の両方を使用して、「デスクトップ」アプリケーションに「オブジェクトとしてのフォルダ」ユーザインタフェースを提供します。このパッケージ方法を使用すると、いくつかのファイルシステムオブジェクトを含むフォルダが、「デスクトップ」アプリケーションのウインドウ内であたかも単一のファイルのように動作するようになります。新しい
Mac OS X のバンドル形式に関する説明は、『Mac OS X
System
Overview』の中にまとめられています。この文書は次の
Web サイトから入手できます。
http://developer.apple.com/techpubs/macosx/macosx.html
Mac OS 9 のパッケージ形式は、「Technical Note
1188 Packages in Mac OS 9」(http://developer.apple.com/ja/technotes/tn1188.html)
で詳細に説明されています。また、Mac OS X
のバンドル形式は『Mac OS X System
Overview』の中で説明されています。
Mac OS 9 のパッケージモデルと Mac OS X
のバンドル形式は両方ともフォルダを使用するため、Mac
OS 9 のパッケージであると同時に Mac OS X
のバンドルでもあるフォルダを設定することができます。このようなフォルダは、Mac
OS X
のバンドル仕様に準拠しなければなりませんが、Mac OS
9
ファイルは「:Contents:MacOSClassic:」サブフォルダを含むサブディレクトリ内に格納される必要があります。
ページの先頭に戻る
プリエンプションとマルチタスキング
WaitNextEvent
によって課される以前の「イベントのポーリング」モデルは、Mac
OS X ではもはや必要ありません。Mac OS X
で実行される Carbon および Cocoa
アプリケーションは、プロセッサ時間のより効率的な使用を可能にする新しい
Carbon
イベントモデルを使用することができます。Carbon
イベントにより、イベントモデルが変更されました。つまり、応答する必要のある状況の変化を検出するためにアプリケーションがイベントのポーリングを行う代わりに、応答する必要のあるイベントが発生するたびに、アプリケーションが呼び出されるようになります。
同様に、Carbon
には、対称的にスケジュールされる独自のプリエンプティブタスクを作成するために使用できるマルチプロセッシング
API のスイートも用意されています
(このテクニカルノートを執筆している時点で、すべての
Carbon API
をプリエンプティブタスクから呼び出すことはできませんでした。詳細については、マルチプロセッシング
API のマニュアルを参照してください)。
Carbon イベントのマニュアルは Carbon SDK
に含まれています。また、Apple
のマルチプロセッシング API のマニュアルは
Multiprocessing SDK に含まれています。
ページの先頭に戻る
ファイル構成
Mac OS X と Carbon は、タイプとクリエータを含む
Mac OS に伝統的な 2
つのフォークから構成されるファイルだけでなく、ファイル拡張子を含む単一フォークから構成されるファイルを対象にも動作するように設計されています。r.
ページの先頭に戻る
コードの共有
Code Fragment Manager は、Mac OS X の Carbon API
に完全に実装されています。同様に、Mac OS X
は、フレームワーク(Framework)と呼ばれるコードの共有に対応した新しいメソッドを実装しています。フレームワークは、Mac
OS X
のバンドルとしてパッケージされているライブラリです。フレームワークは本質的に、共有コード内にソフトウェアに関連するヘッダとともにパッケージされた共有ライブラリです。
フレームワークは、『Mac OS X System
Overview』の中で説明されています。
ページの先頭に戻る
バックグラウンドオンリーアプリケーション
バックグラウンドオンリーアプリケーションは完全にサポートされています。さらに、多くの場合、システムリソースへのより効率的なアクセスを実現するため、バックグラウンドオンリーアプリケーションを
Mach-O 実行可能ファイルとして実装することが可能です
(その結果、バックグラウンドオンリーアプリケーションはデーモンプロセスとして機能するようになります)。
ページの先頭に戻る
共有メモリ
Mac OS X
環境で実行されるアプリケーションでは、アプリケーション間の通信に共有メモリ領域を使用することができます。ただし、Mac
OS X
では、それぞれのアプリケーションに対して保護された個別のメモリパーティションを使用するため、アプリケーション間で共有されるメモリを実装するには追加の作業が必要になります。
注意: Carbon
アプリケーションも、アプリケーション間でスモールイベントタイプの通知を送信するために
Core Foundation
の通知機能にアクセスすることができます。また、Mac
OS X Mach-O バイナリとしてコンパイルされた Carbon
アプリケーションは、メモリを共有するために BSD API
にアクセスできます。
ページの先頭に戻る
プロセス間通信
PPC ToolBox は、Carbon
アプリケーションでは使用できません。Carbon
では、相当する機能が Apple Event Manager
によって用意されています。PPC ToolBox
を使用するコードは、Apple Event Manager
を使用するように変更してください。
注意: Carbon
アプリケーションも、アプリケーション間でスモールイベントタイプの通知を送信するために
Core Foundation
の通知機能にアクセスすることができます。また、Mac
OS X Mach-O バイナリとしてコンパイルされた Carbon
アプリケーションは、Mach-O
スタイルのメッセージングにアクセスできます。
ページの先頭に戻る
ユーザの操作感
Macintosh
はこれまで、操作が容易で、わかりやすく、また操作方法が一貫したコンピュータとして高い評価を得てきました。Mac
OS X は、Aqua
と呼ばれるより洗練されて拡張されたユーザインタフェースにより、まったく新しいレベルでこのような
Macintosh
の伝統を継承します。ユーザは、アプリケーションが
Aqua
ユーザインタフェースを全面的に利用することを期待します。このようなユーザの期待に応える最善の方法の
1 つは、開発者が新しい Aqua
ヒューマンインタフェースガイドラインに準拠することです。
Aqua ユーザインタフェース
アプリケーションを Carbon
アプリケーションとしてコンパイルし、そのアプリケーションがユーザインタフェースを描画するために標準的なシステムコントロールと
Appearance Manager ルーチンを使用している場合、Mac
OS X 上で実行するとき、そのアプリケーションは Aqua
ユーザインタフェースを表示できるようになります。
既存のアプリケーションを Mac OS X
に移行するときは、製品のインタフェースを一新するために時間をかけてください。これを行うことで、製品を競合製品から差別化して卓越したものにする優れたユーザの操作感を提供できるようになります。
アプリケーションに Aqua
を採用する方法については、『Adopting
Aqua』(http://developer.apple.com/techpubs/macosx/)
を参照してください。
ページの先頭に戻る
Apple ヘルプ
一貫した説得力のある方法でユーザにヘルプコンテンツを提供することは、ユーザの操作感を向上させるための主要な構成要素の
1
つとなります。これを実現するための最善の方法は、Mac
OS X に対応した HTML ベースのヘルプシステムである
Apple ヘルプを使用することです。
AppleGuide
とバルーンヘルプはもはやサポートされず、Apple
ヘルプが Mac OS X
に対応した唯一のヘルプソリューションとなります。Apple
ヘルプは HTML 3.2
に基づき、サードパーティ製の一般的な Web
オーサリング製品によるコンテンツのオーサリングを可能にします。また、QuickTime、AppleScript、URL
Access、Internet Config、VTwin、HTML Rendering
Library、Carbon など、Apple
の多くのコアテクノロジに基づいて設計されています。
Apple ヘルプの使い方の詳細については、Apple Help
SDK (http://developer.apple.com/sdk/index.html)
を参照してください。
ページの先頭に戻る
カスタムコードリソース
カスタムコードリソースは、Carbon
アプリケーションではもはや使用されません。その代わりに、アプリケーションは新しい
API
を使用して、カスタムコントロール、カスタムウインドウ、カスタムメニュー、およびカスタムリストを作成する必要があります。ここでは、これらの新しい
API について説明します。
カスタムコントロール (CDEF)
カスタムコントロール定義プロシージャは今後、個別のスタンドアロンコードリソースとしてコンパイルされません。Carbon
では、カスタム定義プロシージャをアプリケーションとしてコンパイルし、CreateCustomControl
ルーチンを使って、カスタム定義プロシージャを使用するコントロールを作成しなければなりません。
通常、CreateCustomControl
に渡すコントロール定義ルーチンは CDEF
ルーチンと同様に古い呼び出し規約を使用するため、コードを
Carbon
に移行するには、コードリソースをアプリケーションとして再コンパイルし、カスタム描画メソッドを使用するコントロールを作成するときに
CreateCustomControl
を使用するように切り替えるだけです。
クロスコンパイル可能な Carbon/pre-Carbon
ソースベースの維持に関心のある開発者は、「xDEF
のための下位互換コーディング」のセクションで概説されている方法を使用することができます。
ページの先頭に戻る
カスタムリスト定義 (LDEF)
カスタムリスト定義は CreateCustomList API
を使用するようになりました。ただし、多くの場合は、これまで
List Manager
が使用されていた場所で、新しいデータブラウザコントロールを使用することをお勧めします。データブラウザコントロールは、Mac
OS 9 と Mac OS X の両方で実行する Carbon
アプリケーションで使用できます。
ページの先頭に戻る
カスタムメニュー (MDEF)
カスタムメニューは CreateCustomMenu API
を使用するようになりました。
ページの先頭に戻る
カスタムウインドウ (WDEF)
カスタムウインドウは CreateCustomWindow API
を使用するようになりました。ウインドウ定義プロシージャを個別のコードリソースに格納することはもはや必要ありません。リスト
1 と 2
は、ウインドウ定義ルーチンを実装する方法と、それを使用するウインドウを作成する方法を具体的に示しています。
static pascal long SimpleFrameDef(short varCode, WindowRef window,
short message, long param)
{
#pragma unused( varCode )
switch ( message )
{
case kWindowMsgGetFeatures:
*(OptionBits*) param = kWindowCanGetWindowRegion
| kWindowDefSupportsColorGrafPort;
return 1;
case kWindowMsgGetRegion:
{
GetWindowRegionRec* rgnRec = (GetWindowRegionRec*) param;
if ( rgnRec->regionCode == kWindowContentRgn
|| rgnRec->regionCode == kWindowStructureRgn )
{
Rect portBounds;
GetWindowBounds( window, kWindowGlobalPortRgn,
&portBounds );
RectRgn( rgnRec->winRgn, &portBounds );
if ( rgnRec->regionCode == kWindowStructureRgn )
InsetRgn( rgnRec->winRgn, -1, -1 );
}
return noErr;
}
case kWindowMsgDraw:
{
Rect portBounds;
GetWindowBounds( window, kWindowGlobalPortRgn, &portBounds );
InsetRect( &portBounds, -1, -1 );
FrameRect( &portBounds );
break;
}
case kWindowMsgHitTest:
return wInContent;
default:
break;
}
return 0;
}
|
リスト 1
ウインドウ定義ルーチン実装するコード
|
リスト 1
に示したウインドウ定義ルーチンを使用すると、CreateCustomWindow
ルーチンを呼び出すことで、この定義を使用する新しいウインドウを作成することができます。リスト
2
には、この方法を具体的に説明するサンプルを示します
WindowDefSpec defSpec;
WindowRef floater;
defSpec.defType = kWindowDefProcPtr;
defSpec.u.defProc = NewWindowDefUPP( SimpleFrameDef );
SetRect( &bounds, 10, 60, 200, 200 );
CreateCustomWindow( &defSpec, kFloatingWindowClass,
kWindowStandardFloatingAttributes,
&bounds, &floater );
ShowWindow( floater );
|
リスト 2
リスト 1
で定義したウインドウ定義プロシージャを使用するウインドウを作成する方法を具体的に説明するコード
|
ページの先頭に戻る
システム機能拡張とコントロールパネル
システム機能拡張とコントロールパネルは、Mac OS X
ではアプリケーションとして実装しなければなりません。一方、Mac
OS 9 の場合、これらは APPE および APPC
タイプのアプリケーションとして実装する必要があります。次に、システム機能拡張とコントロールパネルによって一般的に使用されるいくつかの機能の概要と、Mac
OS X でのそれらのステータスを示します。
ADB のパッチング
ADB Manager は Mac OS X
ではサポートされません。
ページの先頭に戻る
コンテキストメニューモジュール
コンテキストメニューモジュール (CMM) は Mac OS X
でもサポートされます。ただし、以前の SOM
オブジェクト形式は使用されません。CMM
をロードするシステムは、コンテキストメニュー項目サブフォルダ
(このフォルダの厳密な位置は、kContextualMenuItemsFolderType
セレクタを使って FindFolder
を呼び出すことによって決定できます) 内の CFM
プラグインとして保存する必要があります。
ページの先頭に戻る
I/O Kit を使用するドライバ
『Inside Macintosh: Devices and
Drivers』でマニュアル化されているこれまでの Mac OS
デバイスドライバ API
はもはやサポートされません。Mac OS X
で使用するドライバの作成に関心のある開発者は、新しいデバイスドライバ
API を使用する必要があります。現在、これらの API
は、Mac OS X Developer Tools の一部です。(関連するヘッダーファイルは IOKit.framework および Kernel.framework に含まれています。)
Mac OS X
に対応したドライバ開発の詳細については、Mac OS X
のインストールディスク
(/Developer/Documentation/Kernel) または Mac OS X
Developer Documentation Web サイト (http://developer.apple.com/techpubs/macosx/)
にある I/O Kit のマニュアルを参照してください。
また、I/O Kit のソースコードは、Apple の Darwin
Public Source Web サイト (http://www.publicsource.apple.com)
からもダウンロードできます。I/O Kit
を含むプロジェクトは、xnu (カーネルを含む) および
IOKitUser (IOKitLib を含む) です。
ページの先頭に戻る
jGNEFilter
jGNEFilter は Mac OS X
ではサポートされません。
ページの先頭に戻る
トラップのパッチング
Mac OS X
にはトラップテーブルは含まれていません。
ページの先頭に戻る
特殊な問題
このセクションでは、製品を Mac OS X
に移行するときに検討する必要のあるその他の特殊な問題について説明します。
アプリケーションのための下位互換コーディング
Carbon または pre-Carbon
環境に対応してコンパイルできる下位互換性のあるコードベースを維持することができます。このセクションは、pre-Carbon
システムを使用する顧客をサポートすると同時に、最新の
Carbon
ヘッダを使用してソースベースを常に最新の状態に保持しようとしている開発者向けに書かれています。
pre-Carbon
実行に対応したコンパイルを行うには、次のステップを使用します
- Universal Interfaces 3.3.2
以降を使用していることを確認します。Universal
Interfaces の最新バージョンは、http://developer.apple.com/sdk/index.html
から入手できます。
- コンパイル時間シンボルの
OPAQUE_TOOLBOX_STRUCTS と
ACCESSOR_CALLS_ARE_FUNCTIONS を 1
に設定します。
- CarbonAccessors.o
およびその他必要なライブラリをすべてリンクします。
- コンパイル時間変数 TARGET_API_MAC_CARBON
を使って、プログラムの Carbon
固有部分のコンパイルを制御します。
重要
CarbonAccessors.o は、CarbonLib
アプリケーションまたは InterfaceLib
アプリケーションのいずれかとしてコンパイルできる製品のソースベースを維持することを可能にしますが、InterfaceLib
アプリケーションが CarbonLib
でのみ使用可能なルーチンを使用することを許可しません。CarbonAccessors.o
を使用するときに何らかの問題が発生した場合は、Apple
の Bug Reporting Web ページ (http://developer.apple.com/bugreporter/index.html)
を使用して、問題を Apple
にレポートしてください。
|
さらに、アプリケーションを Carbon
アプリケーションとしてコンパイルするには、次のステップを使用します。
- Universal Interfaces 3.3.2
以降を使用していることを確認します。
- コンパイル時間シンボル TARGET_API_MAC_CARBON
を 1 に設定します。
- CarbonLib
およびその他必要なライブラリをすべてリンクします。
- コンパイル時間変数 TARGET_API_MAC_CARBON
を使って、プログラムの Carbon
固有部分のコンパイルを制御します。
- 'carb' ID=0
リソースをアプリケーションのリソースフォークにインクルードします。
多くの場合、アプリケーションの Carbon および
pre-Carbon
互換ソースベースを作成するための最小要件は、リスト
3
に示す条件ステートメントをプログラムのメインルーチンに追加することです。
#if ! TARGET_API_MAC_CARBON
#ifndef __MWERKS__
QDGlobals qd; /* QuickDraw globals */
#endif
#endif
int main(void) {
#if ! TARGET_API_MAC_CARBON
SetApplLimit(GetApplLimit());
MaxApplZone();
InitGraf(&qd.thePort);
InitFonts();
InitWindows();
TEInit();
InitMenus();
InitDialogs(0);
#endif
InitCursor();
. . .
|
リスト 3
Carbon/pre-Carbon
クロス互換アプリケーションの作成に必要ないくつかのプリプロセッサ時間を具体的に説明するコード
|
大多数のケースでは、アプリケーションを Carbon
化して、上述のコンパイル時間構造体をアプリケーションにインクルードすると、アプリケーションを
System 7 から System 8 に対応した pre-Carbon
アプリケーション、System 8.1、Mac OS 9.x、および
Mac OS X に対応した CFM Carbon
アプリケーション、および Mac OS X に対応した Mach-O
Carbon
アプリケーションとしてコンパイルすることが可能になります。ただし、Carbon
インタフェースで提供される API
は、それらがアプリケーションを実行する環境内に実装されている場合のみ使用可能である点に注意してください。
リスト 3 のコードは、クロス互換
Carbon/pre-Carbon
コードに最小限必要なコンパイラ除外要件を示しています。アプリケーションが使用するオペレーティングシステムの部分によっては、ソースファイル内のさらに別の場所に、追加のコンパイル除外要件を配置しなければならない場合もあります。最も明らかな場所は次のとおりです。
- リスト 3
に示すような初期化ステートメント。
- SystemClick の呼び出し。
- OpenDeskAcc や AddResMenu
などの、アップルメニューの管理に関連する API
の呼び出し (Carbon
アプリケーションでは、アップルメニューは自動的に管理されます)。
- CDEF、LDEF、WDEF
などのカスタムコードリソースを使用する場所。クロス
Carbon
互換コードを維持する技法については、次の「xDEF
のための下位互換コーディング」のセクションと「カスタムコードリソース」のセクションを参照してください。
ページの先頭に戻る
xDEF のための下位互換コーディング
カスタム定義プロシージャを作成して使用する下位互換コードベースを維持することができます。このセクションでは、その具体的な方法を説明する
LDEF のサンプルを示します。
Carbon
アプリケーションの場合、定義ルーチンはアプリケーションの実行可能ファイル内に格納されます。これらのルーチンは、以前のシステムバージョンのように個別のコードリソースとしては格納されません。このサンプルの定義ルーチンは、pre-Carbon
ビルドと Carbon
ビルドの両方でアプリケーションのコード内に格納されます。pre-Carbon
ビルドの場合、定義ルーチンのコードをコードリソースに格納する代わりに、コードリソースには、アプリケーションに格納されているルーチンにジャンプする単一のジャンプ命令が含まれます。リスト
4
は、コードリソースに保存されるジャンプ命令の形式を具体的に説明する
C の宣言を示します。また、図 1 は、ResEdit
ウインドウに表示したこのリソースの具体例を示しています。
#if ! TARGET_API_MAC_CARBON
#define kPatchResID 128
#define kPatchResTYPE 'LDEF'
#pragma options align=mac68k
typedef struct {
short jmpabs; /* 4EF9 */
ListDefUPP theUPP; /* 00000000 */
} **PatchResource;
#pragma options align=reset
#endif
|
リスト 4
LDEF
リソースへのアクセスに使用される型定義
|
アプリケーションを Carbon
アプリケーションとしてコンパイルするとき、このリソースは無視されます。また、このリソースが占有するスペースは取るに足らないものであるため、このリソースをリソースフォーク内に放置しても特に障害が発生することはありません。

図 1 ResEdit ウインドウに表示された LDEF
リソースの内容
アプリケーションの内部に、定義ルーチンそのもののコードを書き込みます。多くの場合、これらのルーチンのプロトタイプは
Carbon
で変更されていないため、定義プロシージャそのものの中に特殊なコンパイル時間スイッチは必要ありません。
リスト 5
は、この方法を使ってコンパイルされたカスタムリスト定義を使用する方法を具体的に示しています。Mac
OS 9
の場合、コードリソースはアプリケーション内で定義されている定義プロシージャをポイントするようにセットアップされ、リストは以前の
LNew
ルーチンを使って作成されます。一方、アプリケーションが
Carbon
アプリケーションとしてコンパイルされているとき、LDEF
リソースは使用されません。その代わりに、Carbon
アプリケーションは CreateCustomList
呼び出しの中にリスト定義プロシージャへの参照を提供します。
/* the list definition procedure */
static pascal void HListDataLDEF(short lMessage,
Boolean lSelect, Rect* lRect, Cell lCell, short lDataOffset,
short lDataLen, ListHandle lHandle) {
. . .
}
. . .
ListHandle theList; /* リストに使用するストレージ */
. . .
#if TARGET_API_MAC_CARBON
/* Carbon アプリケーションは CreateCustomList API を使用する */
ListDefSpec theSpec;
theSpec.defType = kListDefUserProcType;
theSpec.u.userProc = NewListDefProc(HListDataLDEF);
CreateCustomList(bounds, &dataBounds, cSize, &theSpec,
theWindow, true, hasGrow, false, true, &theList);
#else
/* pre-Carbon アプリケーションは、LDEF 内のアドレスを
リスト定義ルーチンを参照するルーチンディスクリプタに
設定する */
PatchResource gLDEFrsrc;
gLDEFrsrc = (PatchResource) GetResource(kPatchResTYPE, kPatchResID);
(**gLDEFrsrc).theUPP = NewListDefProc(HListDataLDEF);
theList = LNew(bounds, &dataBounds, cSize, kPatchResID,
theWindow, true, hasGrow, false, true);
#endif
|
リスト 5
カスタムリスト定義ルーチンを使用するリストの作成
|
ページの先頭に戻る
ダブルバッファ化されたウインドウ
Mac OS X
のスクリーンは自動的にダブルバッファ化されます。通常の描画と更新イベントへの応答の場合、何からの特殊な描画を行う必要はありません。ただし、一部の環境では、システムが表示するウインドウの内容を明示的に描画することを要求しなければならないこともあります。リスト
6 は、この方法を具体的に示しています。
CGrafPtr thePort;
WindowPtr theWindow;
thePort = GetWindowPort(theWindow);
/* ポート全体をフラッシュする */
if (QDIsPortBuffered(thePort))
QDFlushPortBuffer(thePort, NULL);
/* ポートの一部をフラッシュする */
if (QDIsPortBuffered(thePort)) {
RgnHandle theRgn;
theRgn = NewRgn();
/* ローカルポート座標 */
SetRectRgn(theRgn, 10, 10, 100, 30);
QDFlushPortBuffer(thePort, theRgn);
DisposeRgn(theRgn);
}
|
リスト 6
あるウインドウの Grafport
の内容のスクリーンへのフラッシュ
|
重要
Carbon
ウインドウ内に描画される項目は、アプリケーションが直接的または間接的にイベントループ
(RunApplicationEventLoop、WaitNextEvent、GetNextEvent、TrackMouseLocation
など)
を呼び出す場合にのみ、自動的にスクリーンにフラッシュされます。
アプリケーションがイベントループを呼び出すことなしにウインドウを更新しようとする場合
(たとえば、プログラムの起動時にスプラッシュウインドウ内に項目を描画する場合など)、ウインドウ内に描画された項目がスクリーンにフラッシュされる
(QDFlushPortBuffer を呼び出すことで)
のを確認することはアプリケーションの責任です。
|
デフォルトの設定で、すべてのウインドウはダブルバッファ化されます。この動作が望ましくない場合は、kWindowNoBufferingAttribute
属性を指定して CreateNewWindow を呼び出すことで
(リスト 7
を参照)、明示的に無効にすることができます。
CreateNewWindow(kDocumentWindowClass, kWindowNoBufferingAttribute,
&bounds, &theWindow);
|
リスト 7
バッファリングをオフにしたウインドウの作成
|
ページの先頭に戻る
特殊フォルダとファイルアクセス権
FindFolder ルーチンは Mac OS X
でも完全にサポートされており、システムによって指定される特殊フォルダを検出するために使用できます。Mac
OS X
でのこれらのフォルダの位置と以前のシステムリリースでの位置とは劇的に異なる可能性があるため、FindFolder
によって返されるボリュームおよびディレクトリ情報は、特殊フォルダの位置を検出するために唯一サポートされる方法になりました。
なお、ユーザごとに、これらの特殊ディレクトリに保存されているファイルに対するファイルアクセス権が異なる可能性のあることに注意してください。アプリケーションがこうした条件下で動作できることを確認する方法については、次のアドレスにある
Multiple Users Info Kit を参照してください。
ftp://ftp.apple.com/developer/Technical_Documentation/MultipleUsers_Info_Kit_R3/.
ページの先頭に戻る
一般的なコーディングの変更
このセクションでは、Carbon
への移行時にアプリケーションに加える必要のある一般的な変更について説明します。
Opaque(不可視) 構造体
大部分の Toolbox 構造体は opaque
になりました。これは、大部分の Toolbox
構造体への直接的なアクセスがもはや不可能であり、アクセッサルーチンによってのみアクセスできるということを意味します。
ページの先頭に戻る
コードリソース
CDEF、WDEF、LDEF
などのカスタムコードリソースはもはや使用されません。その代わりに、これらの機能の実装を可能にする新しいメカニズムが存在します。これらのメカニズムの使い方については、「カスタムコードリソース」のセクションを参照してください。
ページの先頭に戻る
QuickDraw グローバル
QuickDraw
グローバル変数はもはや構造体参照を使ってアクセスされません。これらのグローバルにアクセスするときは、アクセッサルーチンを使用する必要があります。
long GetQDGlobalsRandomSeed(void);
BitMap * GetQDGlobalsScreenBits(BitMap *screenBits);
Cursor *GetQDGlobalsArrow(Cursor *arrow);
Pattern *GetQDGlobalsDarkGray(Pattern *dkGray);
Pattern *GetQDGlobalsLightGray(Pattern *ltGray);
Pattern *GetQDGlobalsGray(Pattern *gray);
Pattern *GetQDGlobalsBlack(Pattern *black);
Pattern *GetQDGlobalsWhite(Pattern *white);
CGrafPtr GetQDGlobalsThePort(void);
void SetQDGlobalsRandomSeed(long randomSeed);
void SetQDGlobalsArrow(const Cursor *arrow);
|
リスト 8
新しい QuickDraw
グローバルアクセッサルーチン
|
ページの先頭に戻る
The Scrap Manager
Scrap Manager API
は、拡張機能を提供するために拡張されました。新しい
Scrap Manager の最も興味深い機能の 1
つは、アプリケーションが promised
フレーバーを指定することができ、クライアントアプリケーションが
promised
スクラップフレーバーのデータを要求するまで、アプリケーションはそれを提供する必要がないということです。これにより、追加の処理要件を必要とすることなく、アプリケーションがより豊富なスクラップタイプの選択を提供できるようになることは明らかです。
ページの先頭に戻る
対応関係一覧
このセクションの早見表を利用すると、既存の Mac
OS API と Mac OS X でそれらの API
によって提供される機能の対応関係をすばやく確認することができます。「サポートされています」と記載されている項目は
Carbon API
として用意されていますが、それ以外の項目はサポートされていません。
Mac OS 7/8/9
のテクノロジ
|
Mac OS X
での類似機能
|
Alias Manager
|
Alias Manager は
Carbon
でもサポートされています。詳細については、Alias
Manager の Carbon
仕様を参照してください。
|
Appearance Manager
|
Carbon
では引き続き Appearance Manager
を使用します。そのため、新しい Aqua
ユーザインタフェースを無償で手に入れることができます。詳細については、Appearance
Manager の Carbon
仕様を参照してください。
|
Apple Event
Manager
|
Classic、Cocoa、および Carbon 間で Apple
イベントを相互に送信するために使用できます。ただし、リモートマシンにイベントを送信することを目的として使用できなくなりました。詳細については、Apple
Event Manager の Carbon
仕様を参照してください。
|
Apple Filing
Protocol (AFP)
|
PBControl または
NAFPCommand 呼び出しを使って AppleShare
Server に AFP
パケットを送信している開発者が Mac OS X
でもこれらのサービスにアクセスしたい場合は、製品を改訂して、AppleShareClientCore
フレームワークによって提供される新しい AFP
API
を使用する必要があります。このフレームワークは、Carbon
アプリケーションと Mach-O
バイナリとしてコンパイルされている Cocoa
アプリケーションの両方で使用できます。AppleShareClientCore/afpDataStream.h
で定義されている AFP Datastream API
は、以前の API
と同じ機能を提供します。
|
Apple Game
Sprockets
|
相当する機能は他のマネージャで見つけてください。詳細については、Apple
Game Sprockets の Carbon
仕様を参照してください。
|
Apple Guide
|
Apple ガイド
サポートされていません。Apple
ガイドのヘルプ機能は Help Viewer
ヘルプブックに移行する必要があります。
|
Apple Help Viewer
|
Apple Help Viewer
は今後もサポートされます。ただし、Mac OS X
上のヘルプブック形式は改訂され、アプリケーションバンドル形式により近いものになりました
(ローカライズ可能な情報を含めて)。詳細については、Printing
Manager の Carbon
仕様を参照してください。
|
Apple Shared
Library Manager
|
サポートされていません。
|
Apple Type
Services for Unicode
|
サポートされています。詳細については、ATSUI
の Carbon 仕様を参照してください。
|
AppleScript
|
完全にサポートされています。詳細については、Open
Scripting Architecture の Carbon
仕様を参照してください。
|
AppleShare
|
AppleShareClientCore
フレームワークによって提供される新しい AFP
API を使用します。
|
Code Fragment
Manager
|
サポートされています。詳細については、Code
Fragment Manager の Carbon
仕様を参照してください。
|
Collection Manager
|
Collection Manager
は Carbon
でもサポートされています。詳細については、Collection
Manager の Carbon
仕様を参照してください。
|
ColorSync Manager
|
完全にサポートされています。
|
Communications
Toolbox
|
サポートされていません。
|
Component Manager
|
完全にサポートされています。詳細については、Component
Manager の Carbon
仕様を参照してください。
|
Contextual Menu
Manager
|
サポートされています。SOM CMM
は今度サポートされません。
|
Control Manager
|
サポートされています。
|
Control Panels
|
サポートされていません。代わりにアプリケーションを使用します。
|
Control Strip
|
ドック内に配置します。
|
Cursor Utilities
|
カーソルユーティリティは Mac OS X
でも完全にサポートされています。また、アプリケーションが時間のかかる操作の完了を待っているときに、開発者が独自のカスタムアニメーションタスクを表示する必要はもはやありません。Mac
OS X
は、最前面のタスクがブロックされるたびに、回転する虹色のアニメーションディスクカーソルを自動的に表示します。
|
Date, Time, and
Measurement Utilities
|
完全にサポートされています。
|
Dialog Manager
|
サポートされています。ただし、一部のルーチンは削除されました。詳細については、Dialog
Manager の Carbon
仕様を参照してください。
|
Disk
Initialization Manager
|
サポートされていません。今後はデスクトップ
(これまでの Finder) を使用します。
|
Display Manager
|
サポートされています。詳細については、Display
Manager の Carbon
仕様を参照してください。
|
Drag Manager
|
サポートされています。詳細については、Drag
Manager の Carbon
仕様を参照してください。
|
Edition Manager
|
Edition Manager
サポートされていません。
|
Event Manager
|
サポートされています。
新しく導入されたイベントモデルは「Carbon
イベント」と呼ばれます。一部のマニュアルは、CarbonLib
SDK に含まれています。
|
Exception Manager
|
サポートされていません。
|
File Manager
|
File Manager は
Carbon
でもサポートされています。ただし、File
Manager の API
の一部は削除されました。特に、「作業ディレクトリ」という概念は
Carbon
ではサポートされていません。作業ディレクトリを使用する代わりに、アプリケーションは常にファイルシステムのエンティティを参照して、明示的な名前、ボリューム、およびディレクトリ
ID を使用する必要があります。
ファイルシステムにアクセスするには、新しい
HFS Plus API
を使用し始めることをお勧めします。新しい
HFS Plus API の詳細については、File
Manager のマニュアルを参照してください。
|
File System
Manager
|
File System
Manager は、Carbon または Mac OS X
ではもはやサポートされません。Mac OS X
でこの機能が必要な場合は、VFS (Virtual
File System) プラグイン Mach-O
拡張機能を実装する必要があります。
|
Find By Content /
Sherlock
|
サポートされています。
|
Finder Interface
|
Mac OS X
では、ファイルシステムとともにユーザインタフェースを提供するアプリケーションは「デスクトップ」と呼ばれます。このアプリケーションは、以前のシステムリリースとともに出荷されていた
Finder
アプリケーションの機能を代替します。
伝統的な Finder リソースと Finder
情報は、デスクトップアプリケーションによって認識されます。さらに、デスクトップは
Mac OS 9 のパッケージも認識します。
Mac OS X には、『Mac OS X System
Overview』でマニュアル化されている、より豊かなアプリケーションバンドル方式が組み込まれています。
|
Folder Manager
|
システムによって維持される特殊フォルダの位置は、アプリケーションが
Mac OS X
内で実行されるときに劇的に変わる可能性があります。したがって、アプリケーションがこれらの特殊フォルダの位置を識別するときは、FindFolder
によって返されるボリューム参照番号とディレクトリ
ID
の両方を拠り所にすることが重要です。
また、これらのフォルダ内に格納されているファイルに対するアクセス権はユーザごとに異なる可能性があるという事実をアプリケーションが正しく認識していることも必要です。詳細については、このテクニカルノートの「特殊フォルダとファイルアクセス権」のセクションを参照してください。
|
Font Manager
|
サポートされています。
|
FontSync
|
サポートされています。
|
Gestalt Manager
|
サポートされています。
|
Help Manager
|
Balloon Manager
はヘルプタグに置き換えられました。Carbon
アプリケーションは、MacHelp.h
で定義されている、この新しい Apple ヘルプ
API を使用します。詳細については、Apple
ヘルプの Carbon
仕様を参照してください。
|
HTML Rendering
Library
|
Carbon
でも完全にサポートされています。詳細については、HTML
描画ライブラリの Carbon
仕様を参照してください。
|
Icon Services and
Utilities
|
サポートされています。
|
Imaging (ATSUI)
|
サポートされています。
|
Installer
|
サポートされていません。Mac OS X
には、新しいインストーラメカニズムが用意されています。
|
Interfaces &
Libraries
|
3.3.2.
|
List Manager
|
サポートされています。新しいデータブラウザコントロールを使用して、一貫した「ルック」により、リストをこれまでよりも容易に表示することができます。
|
Locales
|
サポートされています。
|
Location Manager
|
サポートされていません。
|
Low Memory
Accessors
|
アクセッサ関数がローメモリグローバルにアクセスするための唯一の方法になりました。他の方法でローメモリグローバルにアクセスしようとすると、アドレスエラーが発生する可能性があります。
これらの多くは削除されました。詳細については、ローメモリアクセッサの
Carbon
仕様を参照してください。
|
Mac OS USB
|
サポートされています。
|
MacApp
|
ポートされます。
|
Macintosh
Programmer's Workshop (MPW)
|
Classic
環境で使用できます。
|
MacsBug
|
Classic
環境で使用できます。
|
Mathematical and
Logical Utilities
|
MathLib の機能は
CarbonLib からエクスポートされます。
|
Memory Manager
|
サポートされています。ただし、メモリの処理方法に一部変更が加えられました。特に注目すべきは、アプリケーションのヒープスペースが動的に拡大し、もはや固定ではなくなったことです
(Carbon および Cocoa
アプリケーションのみ)。詳細については、Memory
Manager の Carbon
仕様を参照してください。
|
Menu Manager
|
サポートされています。
|
Mixed Mode Manager
|
サポートされていません。
|
MRJ
|
サポートされています。Java 1.2
以降でなければなりません。
|
Multilingual Text
Editor
|
サポートされています。
|
Multiprocessing
Services
|
サポートされています。
|
Multiple Users
|
マルチユーザに関連する API
はサポートされていません。ただし、ユーザレベルとログインレベルの概念はサポートされています。
|
Navigation
Services
|
サポートされています。
|
Network Services
Location (NSL) Manager
|
サポートされています。
|
Notification
Manager
|
サポートされています。詳細については、Notification
Manager の Carbon
仕様を参照してください。
|
Offscreen Graphics
Worlds
|
サポートされています。詳細については、QuickDraw
Manager の Carbon
仕様を参照してください。
|
Open Transport
|
サポートされています。ただし、一部の API
は削除されました。詳細については、Open
Transport の Carbon
仕様を参照してください。
|
Open GL
|
サポートされています。
|
Package Manager
|
サポートされていません。
|
Palette Manager
|
サポートされています。詳細については、Palette
Manager の Carbon
仕様を参照してください。
|
PCI Driver
Development Kit
|
IOKit
を参照してください。
|
Picture Utilities
|
サポートされています。
|
PPC Toolbox
|
PPC Toolbox は
Carbon
には実装されていません。プロセス間で情報を送信するには
Apple Event Manager を使用してください。
|
Printing Manager
|
Printing Manager
の新しい API
が用意されています。現在のマニュアルは
Carbon SDK
に含まれています。詳細については、Printing
Manager の Carbon
仕様を参照してください。
|
Process Manager
|
サポートされています。
|
Queue Utilities
|
サポートされています。
|
QuickDraw
|
サポートされています。CFM
アプリケーションから Quartz
を使用することはできませんが、アプリケーションを
Mach-O
バイナリとしてコンパイルしている場合は使用できます。
|
QuickDraw 3D
|
サポートされていません。
|
QuickDraw Text
|
サポートされています。
|
QuickTime
|
QuickTime API は
CarbonLib に用意されています。
|
ResEdit
|
Classic
で動作します。特定の操作を行うと、クラッシュする場合があります。
|
Resource Manager
|
サポートされています。詳細については、Resource
Manager の Carbon
仕様を参照してください。
|
Scrap Manager
|
サポートされていますが、新しい API
が含まれています。Carbon SDK
でマニュアル化されています。
|
Script Manager
|
サポートされています。
|
Shutdown Manager
|
サポートされていません。この機能を必要とするアプリケーションは、kAEQuitApplication
イベントを使用する必要があります。
|
Sound Manager
|
サポートされています。
|
Speech Recognition
Manager
|
サポートされています。
|
Speech Synthesis
Manager
|
サポートされています。
|
Start Manager
|
サポートされていません。機能拡張は存在しないため、機能拡張のロード順序は重要ではありません。
|
Telephone Manager
|
サポートされていません。
|
Text Encoding
Conversion Manager
|
サポートされています。
|
Text Services
Manager
|
サポートされています。
|
Text Utilities
|
サポートされています。
|
TextEdit
|
サポートされています。
|
Thread Manager
|
サポートされています。
|
Time Manager
|
サポートされています。
|
Translation
Manager
|
サポートされています。
|
Trap Manager
|
サポートされていません。
|
Unicode Utilities
|
サポートされています。
|
URL Access Manager
|
サポートされています。
|
Vertical Retrace
Manager
|
サポートされていません。代わりに Time
Manager を使用します。
|
Virtual Memory
Manager
|
サポートされていません。
|
Window Manager
|
サポートされています。
|
ページの先頭に戻る
|